package cn.lizemin.Responsibility.version0.entity;

/**
 * @author lzm
 * @version 1.0
 * @description: TODO
 * @date 2022/5/2 10:11
 */
public abstract class Approver {
    // 提取审批人的姓名
    protected String name;

    // 下一位审批人
    protected Approver nextApprover;

    public Approver(String name) {
        this.name = name;
    }

    /**
     * 将公共方法和属性提取到抽象或者具体的父类中
     * @param amount
     */
    public abstract void approve(int amount);

    /**
     * 当无权审批时，提交给下一级的节点处理（上级）
     * @param nextApprover
     * @return
     */
    public Approver submitNextApprover(Approver nextApprover) {
        this.nextApprover = nextApprover;
        return this.nextApprover;//返回下一位审批人，使其支持链式编程
    }

}
